#define UP_KEY      2 //gpio12
#define RIGHT_KEY   3 //gpio14
#define DOWN_KEY    4 //gpio13
#define LEFT_KEY    5 //gpio0
#define E_KEY    6 //gpio0
#define F_KEY    7 //gpio0
#define G_KEY    8 //gpio0

#define KEYU  digitalRead(UP_KEY)
#define KEYR  digitalRead(RIGHT_KEY)
#define KEYD  digitalRead(DOWN_KEY)
#define KEYL  digitalRead(LEFT_KEY)
#define KEYE  digitalRead(E_KEY)
#define KEYF  digitalRead(F_KEY)
#define KEYG  digitalRead(G_KEY)
#include <SPI.h>
#include <Wire.h>
//#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
String comdata;
char Buf[255];
Adafruit_SSD1306 display(2);
unsigned int vv;
int fg;
//按键处理函数
//mode:0,不支持连续按;1,支持连续按;
//0，没有任何按键按下
uint8_t KEY_Scan(uint8_t mode)
{   
  uint8_t key_up=1;//按键按松开标志
  if(mode)key_up=1;  //支持连按     
  if(key_up&&(KEYU==0||KEYR==0||KEYD==0||KEYL==0||KEYE==0||KEYF==0||KEYG==0))
  {
    delay(5);//去抖动
    key_up=0;
    if(KEYU==0)Serial.print("1");
    else if(KEYR==0)Serial.print("2");
    else if(KEYD==0)Serial.print("3");
    else if(KEYL==0)Serial.print("4");
    else if(KEYE==0)Serial.print("5");
    else if(KEYF==0&&fg==0)
    {
      Serial.print("7");
      fg=1;
      display.clearDisplay();
      display.setTextSize(1);             //设置字体大小
      display.setTextColor(WHITE);        //设置字体颜色白色
      display.setCursor(0,0);             //设置字体的起始位置
      display.println("Wait for data....");   //输出字符并换行
      display.display(); 
      while(1)
      {
        if(Serial.available()>0)
        {
          waitmsg();break;
        }
      } 
      delay(100);
    }
    else if(KEYG==0)
    {
      Serial.print("6");
      fg=0;
      display.clearDisplay();
      display.setTextSize(1);             //设置字体大小
      display.setTextColor(WHITE);        //设置字体颜色白色
      display.setCursor(0,0);             //设置字体的起始位置
      display.println("Wait for data....");   //输出字符并换行
      display.display();  
      while(1)
      {
        if(Serial.available()>0)
        {
          waitmsg();break;
        }
    }

//  else Serial.print("5");
  delay(100);
    }
  }
  else if(KEYU==1||KEYR==1||KEYD==1||KEYL==1||KEYE==1||KEYF==1||KEYG==1)
  { 
    vv=vv+2;
    key_up=1;
    if(vv==8)Serial.print("5");
  }
  return 0;// 无按键按下
}
void waitmsg()
{
   while (Serial.available() > 0)  
   {
            comdata += char(Serial.read());
            delay(2);
            
    }
        if (comdata.length() > 0)
        {
            comdata.toCharArray(Buf,comdata.length()+1);
            display.clearDisplay();
            display.setTextSize(1);             //设置字体大小
            display.setTextColor(WHITE);        //设置字体颜色白色
            display.setCursor(0,0);             //设置字体的起始位置
            display.println(comdata);           //输出字符并换行
            display.display();                  //把缓存的都显示
  //          Serial.println(comdata);
            comdata = "";
        }
        
 }
void setup() {
  Serial.begin(9600);
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.clearDisplay();
  display.setTextSize(1);            
  display.setTextColor(WHITE);       
  display.setCursor(0,7);             
  display.println("---Hello, world!---");   
  display.display();   
}

void loop() {
  KEY_Scan(1);

}
